package com.gxa.xiaoucomeshome.controller;

import com.gxa.xiaoucomeshome.utils.JsonResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;

@Api(value = "UploadController",tags="上传接口")
@RestController
@RequestMapping("/up")
public class UploadController {

    @PostMapping(value = "/upload")
    @ApiOperation(value = "上传文件的方法")
    public Map upload(
            @RequestParam("file") MultipartFile multipartFile,
            @RequestParam(value = "file2",required = false) MultipartFile multipartFile2,
            @ApiIgnore HttpServletRequest request
            )throws IOException {
        if(multipartFile2 !=null){
            //QQ截图20200724153059.png
            String originalFilename = multipartFile.getOriginalFilename();
            String originalFilename2 = multipartFile2.getOriginalFilename();
            //System.out.println("originalFilename:"+originalFilename);
            // 从原始文件名中获取后缀,作为新添加的文件的文件名后缀(匹配)
            String subfix = originalFilename.substring(originalFilename.indexOf(".")+1);
            String subfix2 = originalFilename2.substring(originalFilename.indexOf(".")+1);
            System.out.println("subfix:"+subfix);
            //使用UUID作为文件名,保证服务器中存放的文件名唯一
            String targetFile = UUID.randomUUID().toString().replace("- ","")+"."+subfix;
            String targetFile2 = UUID.randomUUID().toString().replace("- ","")+"."+subfix2;
            //System.out.println("targetFile:"+targetFile);
            //通过request获取当前程序的根路径"/"
            String path = request.getSession().getServletContext().getRealPath("/");
            //System.out.println(path);
            //可设置绝对路径
            //path="e:";

            String fileName = path+"images\\uploadImg\\"+targetFile;
            String fileName2 = path+"images\\uploadImg\\"+targetFile2;
            //System.out.println("fileName:"+fileName);
            // 构建文件对象
            File file = new File(path+"images\\uploadImg");
            //判断文件是否存在，不存在创建文件
            if (!file.exists()){
                file.mkdirs();
            }
            // 构建文件对象
            File uploadFile = new File(fileName);
            File uploadFile2 = new File(fileName2);
            // 核心操作(含有异常操作, 利用异常设定状态码(和前端约定)
            // 此处应当和ExceptionController结合, 当try执行成功则设定状态码0
            // 出现异常则设定其他
            // 再将异常信息结合BusinessException抛出, 交给ExceptionController处 理
            try {
                multipartFile.transferTo(uploadFile);
                multipartFile2.transferTo(uploadFile2);
            } catch (IOException e) {
                e.printStackTrace();
                throw e; }
            JsonResult jsonResult = new JsonResult();
            // 返回状态:1 表示上传成功
            jsonResult.setCode("200");
            jsonResult.setMsg("上传成功");
            // 返回服务器保存后的文件名
            jsonResult.set("fileName",targetFile);
            jsonResult.set("fileName2",targetFile2);
            //将文件绝对路径返给前段
            jsonResult.set("imgFile",fileName);
            jsonResult.set("imgFile2",fileName2);
            return jsonResult.getMap();
        }
        //QQ截图20200724153059.png
        String originalFilename = multipartFile.getOriginalFilename();
        //System.out.println("originalFilename:"+originalFilename);
        // 从原始文件名中获取后缀,作为新添加的文件的文件名后缀(匹配)
        String subfix = originalFilename.substring(originalFilename.indexOf(".")+1);
        //System.out.println("subfix:"+subfix);
        //使用UUID作为文件名,保证服务器中存放的文件名唯一
        String targetFile = UUID.randomUUID().toString().replace("- ","")+"."+subfix;
        //System.out.println("targetFile:"+targetFile);
        //通过request获取当前程序的根路径"/"
        String path = request.getSession().getServletContext().getRealPath("/");
        //System.out.println(path);
        //可设置绝对路径
        //path="e:";

        String fileName = path+"images\\uploadImg\\"+targetFile;
        //System.out.println("fileName:"+fileName);
        // 构建文件对象
        File file = new File(path+"images\\uploadImg");
        //判断文件是否存在，不存在创建文件
        if (!file.exists()){
            file.mkdirs();
        }
        // 构建文件对象
        File uploadFile = new File(fileName);
        // 核心操作(含有异常操作, 利用异常设定状态码(和前端约定)
        // 此处应当和ExceptionController结合, 当try执行成功则设定状态码0
        // 出现异常则设定其他
        // 再将异常信息结合BusinessException抛出, 交给ExceptionController处 理
        try {
            multipartFile.transferTo(uploadFile);
        } catch (IOException e) {
        e.printStackTrace();
        throw e; }
        JsonResult jsonResult = new JsonResult();
        // 返回状态:1 表示上传成功
        jsonResult.setCode("200");
        jsonResult.setMsg("上传成功");
        // 返回服务器保存后的文件名
        jsonResult.set("fileName",targetFile);
        //将文件绝对路径存入session
        jsonResult.set("imgFile",fileName);
        return jsonResult.getMap();
    }
}
